package net.zoneland.knowledge.enums;

import java.util.Arrays;
import java.util.Optional;

import org.apache.commons.lang3.StringUtils;

/**
 * 干部层级枚举.
 * @author zmq
 * 2021/9/13 13:58
 */
public enum JobTypeEnum {
    /**
     * 一级经理正职.
     */
    DEPT_CHIEFS_LV1(1, "一级经理正职"),
    /**
     * 一级经理副职.
     */
    DEPT_DEPUTY_LV1(2, "一级经理副职"),
    /**
     * 二级经理正职.
     */
    DEPT_CHIEFS_LV2(3, "二级经理正职"),
    /**
     * 二级经理副职.
     */
    DEPT_DEPUTY_LV2(4, "二级经理副职"),
    /**
     * 三级经理正职.
     */
    DEPT_CHIEFS_LV3(5, "三级经理正职"),
    /**
     * 三级经理副职.
     */
    DEPT_DEPUTY_LV3(6, "三级经理副职"),
    /**
     * 四级经理正职.
     */
    DEPT_CHIEFS_LV4(7, "四级经理正职"),
    /**
     * 四级经理副职.
     */
    DEPT_DEPUTY_LV4(8, "四级经理副职");

    /**
     * 名称.
     */
    private String label;
    /**
     * 权限层级.
     */
    private int level;

    JobTypeEnum(int level, String label) {
        this.label = label;
        this.level = level;
    }

    public String getLabel() {
        return label;
    }

    public int getLevel() {
        return level;
    }

    /**
     * 根据名称获取权限层级.
     * @param label 名称
     * @return 层级
     */
    public static int getLevelByLabel(String label) {
        return Optional.ofNullable(
            Arrays.stream(JobTypeEnum.values())
                .filter(it -> StringUtils.equals(it.getLabel(), label))
                .findFirst()
                .orElse(null)
        ).map(JobTypeEnum::getLevel).orElse(Integer.MAX_VALUE);
    }
}
